grep -v 'cpu' file.txt  方向匹配查找
grep --color=auto 'cpu' file.txt 红色加粗显示

cut 文本切割
-d ：自定义分隔符，默认为制表符。
-f  ：与-d一起使用，指定显示哪个区域。
ifconfig | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1

grep:选项
  -v：显示不被模式匹配的行
  -i: 不区分大小写
  -o：只显示匹配的字符串
例：ifconfig| grep -o 'inet addr:[^[:space:]]*' | cut -d: -f2


find;
按文件名查找
-name 'filename'

-empty:查找所有的空文件或者目录

-user USERNAME
-group GRPNAME
-uid UID 根据用户的id
-gid GID 根据组的id号
-nouser 查找所有没有属主的文件
-nogroup 查找所有没有属组的文件	

组合查找条件：
-a： 与  （默认，可省略）
-o: 或
-not: 非

例：find -nouser -a -nogroup  
find /tmp/hadoop -user hadoop -a  -empty

文件类型：
-type f d l s 

tmp下的非空目录
find /tmp -type d -a -not -empty
find /tmp -not \( -empty -o -not -type -d \)


文件大小：
-size [+|-]#UNIT
UNIT:k, G, M

向上圆整， 5.6M ====6M   1.1k ====2k
find /tmp -size 2k	
ls -ldh `find /etc/ -size +2k`  // 大于2k的

根据时间戳查找：
amin [+|-]#  分钟
mmin
cmin

例子：find /tmp -amin -7 七分钟内改变的 

atime [+|-]#  天
mtime
ctime


find ./ -perm -111

find ./ -perm /111 任何一个执行的 rwxr-xr-x
find ./ -perm /222 任何一个有可写权限的

sed命令：

Stream EDiter:流式编辑器，行编辑器

sed [option] 'script' input_file

sed -f 'script_file' input_file

'ADDRESScommand [param]'

ADDRESS
1.缺省表示所有行
2.地址定界：
	ADDR1[，ADDR2]
	1，7 // 1到7行
	1,+2
	3

3.基本正则表达式  /parter/

	-r选项：支持扩展的正则表达式
	
	匹配字符：. []  [^]
	
	次数匹配：* \?  \{m,n\}
	
	锚定符： 
	\<,\b  词首
	\>, \b  词尾
	^       行首
	$	行尾
	^$	空白行
	.*	任意字符

	分组：
	\(\)
	\1, \2
	
	扩展的正则表达式；
	匹配字符：. []  [^]
	
	次数匹配：* ?  {m,n}
	
	锚定符： 
	\<,\b  词首
	\>, \b  词尾
	^       行首
	$	行尾
	^$	空白行
	.*	任意字符

	分组：
	()
	\1, \2

	多出的元字符：
	    次数： + (其前的字符一次或多次)
	    或者： |

命令：
	d: 删除  sed '1,3d' /etc/proc
	p:打印
	a \:追加，附加   sed '/^\//a \#this is a / line' /etc/fstab
	i \：插入，行的前面  （注意反斜线）
	r /path/to/somefile:
	s: 替换
选项：
	-n:静默模式   sed -n '1p' /etc/fstab

sed -e 's/foo/bar/g' myfile.txt  
sed -e 's:/usr/local:/usr:g' mylist.txt  
在该例中，使用冒号作为分隔符。


netstat -tunpl | grep 6379


scp: command not found找不到scp命令
解决：
yum install openssh-clients 


telnet 安装：
#telnet 192.168.131.130 80  检查telnet 
yum install telnet-server telnet
vi /etc/xinetd.d/telnet

#找到 disable = yes 一行，
将其改为: disable = no。
重启服务：service xinetd restart。

===================================================

以下配置centos虚拟机里面能上外网，而主机与centos虚拟机也能连通。

最好的办法就是使用两块网卡，nat(虚拟机访问互联网，使用10.0.2.x段)和host-only(虚拟机和主机互相通信，使用192.168.56.x段)，而virtualbox配置的网络的地方是：打开主机界，按Ctrl+G，然后network，就可以启用vboxnet0了。

打开虚拟机的配置，在networking里面添加第二块网卡为host-only。

接下来在virtualbox中安装centos。

ping baidu，不通，需要在/etc/sysconfig/network-scripts/ifcfg-eth0中将ONBOOT="no"改为yes，再添加BOOTPROTO="dhcp"，保存，退出，重启。再ping 百度，通了。此时可以用命令route看一下，记录一下路由，如果后面出现不能上网，再用route看一下什么异常

再ping主机上的虚拟网卡192.168.56.1，发现也没有问题，是通的，但是主机访问不了虚拟机，这就头痛了，这个时候就要用到我们的第二块网卡host-only来完成主机对虚拟机的访问。操作如下：

在/etc/sysconfig/network-scripts/下面看有没有ifcfg-eth1文件，如果没有，将ifcfg-eth0复制一份，改名为ifcfg-eth1，然后将ONBOOT值改为yes，这里我设置成静态IP，配置如下：

BOOTPROTO=static    #获取IP的方式是dhcp或bootp自动获取，static是固定IP，none是手动
IPADDR=192.168.56.2
NETMASK=255.255.255.0

service network restart

==============================================================
centos安装ab
yum install httpd-tools

查看php扩展  省去phpinfo();
php -i | grep jpeg  

==============================================================
linux服务器查询常用命令

查看一些硬件配置
# uname -a  # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue  # 查看操作系统版本
# cat /proc/cpuinfo  # 查看CPU信息
# hostname  # 查看计算机名
# lspci -tv  # 列出所有PCI设备
# lsusb -tv  # 列出所有USB设备
# lsmod  # 列出加载的内核模块
# env  # 查看环境变量
资源
# free -m  # 查看内存使用量和交换区使用量
# df -h  # 查看各分区使用情况
# du -sh <目录名>  # 查看指定目录的大小
# grep MemTotal /proc/meminfo  # 查看内存总量
# grep MemFree /proc/meminfo  # 查看空闲内存量
# uptime  # 查看系统运行时间、用户数、负载
# cat /proc/loadavg  # 查看系统负载
磁盘和分区
# mount | column -t  # 查看挂接的分区状态
# fdisk -l  # 查看所有分区
# swapon -s  # 查看所有交换分区
# hdparm -i /dev/hda  # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE  # 查看启动时IDE设备检测状况
网络
# ifconfig  # 查看所有网络接口的属性
# iptables -L  # 查看防火墙设置
# route -n  # 查看路由表
# netstat -lntp  # 查看所有监听端口
# netstat -antp  # 查看所有已经建立的连接
# netstat -s  # 查看网络统计信息
进程
# ps -ef  # 查看所有进程
# top  # 实时显示进程状态
用户
# w  # 查看活动用户
# id <用户名>  # 查看指定用户信息
# last  # 查看用户登录日志
# cut -d: -f1 /etc/passwd  # 查看系统所有用户
# cut -d: -f1 /etc/group  # 查看系统所有组
# crontab -l  # 查看


mysql　打包备份

#!/bin/bash
MYUSER=root
MYPASS=123456
SOCKET=/data/3306/mysql.sock
MYCMD='mysql -u$MYUSER -p$MYPASS -S $SOCKET'
MYDUMP='mysqldump -u$MYUSER -p$MYPASS -S $SOCKET'
#mysql -uroot -p -S /data/3306/mysql.sock -e "show database;"|sed '1,2d'|grep -v mysql
for database in `$MYCMD -e "show database;"|sed '1,2d'`
do
	$MYDUMP $database|gzip > /server/backup/${database}_$(date +%F).sql.gz
done
	
-B 后面跟多个数据库 

mysql -uroot -p123 -S /data/3306/mysql.sock -e "show tables from oldboy;"|sed '1d'

awk操作
awk -F'\t' '{if($5==99) sum+=$9} END {print sum}' buyplatformcoinsppt_32_20140301.log


实例七：自定义回收站功能
命令：
myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }

修改root密码
sudo passwd root

动态分配ip,进行上网
dhclient

同步目录
scp -r root@www.cumt.edu.cn:/home/root/others/music /home/space/music/


220.181.89.137 - - [08/Apr/2013:04:03:06 +0800]
60.50.239.74 - - [08/Apr/2013:04:02:49 +0800]
121.9.212.92 - - [08/Apr/2013:04:13:52 +0800]
220.181.165.9 - - [08/Apr/2013:05:07:28 +0800]
121.9.212.92 - - [08/Apr/2013:05:43:51 +0800]
220.181.165.6 - - [08/Apr/2013:06:15:41 +0800]
121.9.212.92 - - [08/Apr/2013:06:43:52 +0800]
121.9.212.92 - - [08/Apr/2013:07:43:52 +0800]
121.9.212.68 - - [08/Apr/2013:08:13:52 +0800]
--统计每个时间段的访问量，例如，凌晨4点（04:00-04:59）这个时间段有3个ip访问
排除同一时间段同一IP的访问
awk -F '[: ]+'   '!b[$1$5]++{a[$5]++}END{for(i in a)print a[i],i":00"|"sort -nk2"}' file


查看linux版本
lsb_release -a


virtualBox CentOS 网卡配置
ping baidu，不通，需要在/etc/sysconfig/network-scripts/ifcfg-eth0中将ONBOOT="no"改为yes，再添加BOOTPROTO="dhcp"，保存，退出，重启。再ping 百度，通了。此时可以用命令route看一下，记录一下路由，如果后面出现不能上网，再用route看一下什么异常

再ping主机上的虚拟网卡192.168.56.1，发现也没有问题，是通的，但是主机访问不了虚拟机，这就头痛了，这个时候就要用到我们的第二块网卡host-only来完成主机对虚拟机的访问。操作如下：

在/etc/sysconfig/network-scripts/下面看有没有ifcfg-eth1文件，如果没有，将ifcfg-eth0复制一份，改名为ifcfg-eth1，然后将ONBOOT值改为yes，这里我设置成静态IP，配置如下：

BOOTPROTO=static    #获取IP的方式是dhcp或bootp自动获取，static是固定IP，none是手动
IPADDR=192.168.56.2
NETMASK=255.255.255.0

注意不能设置GATEWAY，原因：
linux双网卡默认路由问题
在安装第二块网卡后出现无法上网问题，使用route发现是默认路由出现问题，经过多 发查证，才晓得原来linux在加载网卡配置文件的时候是先加载eth0,再加载eht1的，这样，如果eth1设置了gateway项，则会覆盖掉 eth0中的gateway设置，因此解决方法就是删除eth1的gateway设置

xargs用法
批量重命名目录或文件
ls | xargs -t -i mv {} {}.bak

//找到当前目录下所有包含'error' 字符串的文件，并删除
find ./ -type f | xargs grep 'error' | cut -d: -f1 | xargs rm

查看系统所有用户个数
awk -F: '{print $1}' /etc/passwd | wc -l


SHELL编程

basename 是去除目录后剩下的名字
example：shell>temp=/home/temp/1.test
         shell>base=`basename $temp`
         shell>echo $base
结果为：1.test
dirname 是取目录
example：shell>temp=/home/temp/1.test
         shell>dir=`dirname $temp`
         shell>echo $dir
结果为：/home/temp

: 的作用
在if/then中的占位符:

   if condition
   then :   # 什么都不做,引出分支. 
   else
      take-some-action
   fi

清空文件
: > a.txt
或者
cat /dev/null > a.txt

${parameter-default}, ${parameter:-default}
${parameter-default} -- 如果变量parameter没被声明, 那么就使用默认值.
${parameter:-default} -- 如果变量parameter没被设置, 那么就使用默认值.


nginx 服务控制脚本

使用chkconfig和service命令管理nginx服务的脚本：
[root@localhost~]# vi /etc/init.d/nginx
#!/bin/bash 
#chkconfig: - 99 20 
#description: Nginx Service Control Script 
case "$1" in 
  start) 
         /usr/sbin/nginx    
         ;; 
  stop) 
         /usr/bin/killall -s QUIT nginx 
            ;; 
  restart) 
         $0 stop 
         $0 start 
         ;; 
  reload) 
         /usr/bin/killall -s HUP nginx 
         ;; 
  *) 
    echo "Usage:$0 {start|stop|restart|reload}" 
    exit 1 
esac 
exit 0 

[root@localhost~]# chmod a+x /etc/init.d/nginx
[root@localhost~]# chkconfig --add nginx
[root@localhost~]# chkconfig --level 2345 nginx on
接下来nginx脚本可以通过service命令进行管理控制。
[root@localhost~]# service nginx stop
[root@localhost~]# service nginx start
[root@localhost~]# service nginx reload


交互，接收用户输入的内容
read case
echo -e "$case"

php-fpm 管理

master进程可以理解以下信号
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
示例：
php-fpm 关闭：
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启：
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
查看php-fpm进程数：
ps aux | grep -c php-fpm

linux 使用技巧

使用bash时，用Ctrl-R来搜索命令的历史记录。
使用bash时，用Ctrl-W来清除最后一个单词，使用Ctrl-U来清除整行。可以查看man 
行注释（或者使用Ctrl-A回到命令开头，然后再键入#）。你可以之后再通过搜索历史记录回来
pstree -p 可以很方便的显示整个进程树。
使用pgrep 和pkill 来通过名字来发现进程或者给进程发信号（-f选项会有用）。
了解你能向进程发送的信号种类。比如，要挂起一个进程，使用kill -STOP [进程ID]。要了解整个列表，请参考man 7 signal。
如果你想让一个后台进程一直运行，使用nohup or disown 。
通过netstat -lntp 来检测哪些进程在监听。同样可以用lsof。

curl 模拟post 发送数据
-d 后边跟的是要post的数据用name=value的形式，用&隔开。
curl -d "oauth_token=8809d8bd662d52fda7c9737d57759182" http://openapi.1mobile.com/topupapi/userinfo

抓取页面内容到一个文件中
curl -o home.html  http://www.codesky.net

通过ftp下载文件
curl -u 用户名:密码 -O http://www.codesky.net/demo/curtain/bbstudy_files/style.css

通过ftp上传
curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/

10，当我们经常用curl去搞人家东西的时候，人家会把你的IP给屏蔽掉的,这个时候,我们可以用代理
curl -x 24.10.28.84:32779 -o home.html http://www.codesky.net

列出文件大小
ls |grep part | xargs du -sh 


shell脚本 时间段
#!/bin/bash
startdate=`date -d "$1" +%s`
enddate=`date -d "$2" +%s`
count_day=$[($enddate-$startdate)/(24*3600)+1]
echo $count_day

for ((i=0;i< $count_day;i++));
do
                     startsec=$[$startdate+$i*24*3600]

                     tempdate1=`date -d "1970-1-1 0:0:0 GMT + $startsec seconds" +%Y-%m-%d`
                echo $tempdate1
                php /work/1mobile_user/sh/stats_recharge_order.php $tempdate1
done

时间循环
datebeg="2012-04-01"
dateend="2012-05-30"

beg_s=`date -d "$datebeg" +%s`
end_s=`date -d "$dateend" +%s`

while [ "$beg_s" -le "$end_s" ];do
     day=`date -d @$beg_s +"%Y-%m-%d"`;
     beg_s=$((beg_s+86400));
done


rpm软件管理
rpm -ivh lynx          # rpm安装
    rpm -e lynx            # 卸载包
    rpm -e lynx --nodeps   # 强制卸载
    rpm -qa                # 查看所有安装的rpm包
    rpm -qa | grep lynx    # 查找包是否安装
    rpm -ql                # 软件包路径
    rpm -Uvh               # 升级包
    rpm --test lynx        # 测试
    rpm -qc                # 软件包配置文档
    rpm --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6     # 导入rpm的签名信息


加入开机启动
vi /etc/rc.d/rc.local

时间date
    date -s 20091112                     # 设日期
    date -s 18:30:50                     # 设时间
    date -d "7 days ago" +%Y%m%d         # 7天前日期
    date -d "5 minute ago" +%H:%M        # 5分钟前时间
    date -d "1 month ago" +%Y%m%d        # 一个月前
    date +%Y-%m-%d -d '20110902'         # 日期格式转换
    date +%Y-%m-%d_%X                    # 日期和时间
    date +%N                             # 纳秒
    date -d "2012-08-13 14:00:23" +%s    # 换算成秒计算(1970年至今的秒数)
    date -d "@1363867952" +%Y-%m-%d-%T   # 将时间戳换算成日期
    date -d "1970-01-01 UTC 1363867952 seconds" +%Y-%m-%d-%T  # 将时间戳换算成日期
    date -d "`awk -F. '{print $1}' /proc/uptime` second ago" +"%Y-%m-%d %H:%M:%S"    # 格式化系统启动时间(多少秒前)



做压力测试的时候想看看Linux服务器当前负载如何，性能怎样，可以使用下面这些命令
uptime
显示当前用户数，以及最近1 分钟内、5分钟内、15 分钟内系统的平均负载
cat /proc/loadavg
用于显示系统1秒钟平均负载、5秒钟平均负载、15秒钟平均负载、总作业数、正在运行的作业总数
cat /proc/stat

查看系统时区
cat /etc/sysconfig/clock


数据同步
RSYNC_PASSWORD=teI5deIxy rsync -av review.sh rsync://outerlog@127.0.0.86/outerlog/platform

cc攻击防御
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 | netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20 

ssh 远程登录
ssh username@host [-phost] 
eg. ssh test1@127.0.0.1 -p2222

ps -ylC php-fpm --sort=RSS 按照内存占用，排序
